package com.ouc.visualization.dao;

import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.concurrent.ExecutionException;

/**
 * 从nc文件获取数据生成png
 *
 * @author B504
 */
public interface NcPictDaoVisualization {
  /**
   * 从nc文件获取的数据转换成byte数组
   *
   * @param data      从nc中读取到的未经过处理的二维数据
   * @param fixedMin  给定最小值
   * @param fixedMax  给定最大值
   * @param colorType 颜色类型
   * @return
   * @throws IOException
   */
  BufferedImage getPictFromNcData2D(float[][] data, Float fixedMin, Float fixedMax, String colorType) throws IOException;

  /**
   * 通过多线程每行计算每行生成image
   * 最后拼接出来图片
   *
   * @param data      经过归一化之后的数据
   * @param colorType 颜色类型
   * @return 图片流数据
   * @throws IOException
   * @throws ExecutionException
   * @throws InterruptedException
   */
  BufferedImage getPictFromNcData2DByLine(Integer[][] data, String colorType) throws IOException, ExecutionException, InterruptedException;

  /**
   * 从nc文件获取的数据转换成byte数组
   *
   * @param data      从nc中读取到的未经过处理的二维数据
   * @param colorType 颜色类型
   * @return
   * @throws IOException
   */
  BufferedImage getPictFromNcData2D(float[][] data, String colorType) throws IOException;

  /**
   * 对二维数据进行归一化处理
   *
   * @param data     原始nc二维数据
   * @param fixedMin 设定的最小值，没有传null
   * @param fixedMax 设定的最大值，没有传null
   * @return
   */
  public Integer[][] getColorIndexData(float[][] data, Float fixedMin, Float fixedMax);

  /**
   * 对二维数据进行归一化处理
   * 自动寻找最大值和最小值
   *
   * @param data 原始nc二维数据
   * @return
   */
  public Integer[][] getColorIndexData(float[][] data);
}
